package com.wangzhenyu.learn.test.jetpack.hilt

@Suppress("UNUSED")
class NoteOfHilt {}

//首先，要在BaseApplication上添加@HiltAndroidApp注解

//依赖注入普通对象
//普通对象要使用 @Inject constructor()构造
//在Activity中使用注解@AndroidEntryPoint
//再声明一个lateinit var 对象，要使用@Inject注解
//如果存在参数，吧参数也依赖注入
//详情可见MainActivity.kt
//另外，这里不是单例

//依赖注入第三方组件
//如果我们需要一个类，但是因为是第三方，无法添加注解，则如下：
//@Module注解表示这是一个用于提供依赖注入实例的模块。@InstallIn注解表示要装载到哪个模块中。这里使用ActivityComponent表示要装载到Activity组件中
//             组件名称	                       注入场景	                           生命周期
//         ApplicationComponent	           Application	                     Application#onCreate() ~ Application#onDestroy()
//         ActivityRetainedComponent	   ViewModel	                     Activity#onCreate() ~ Activity#onDestroy()
//         ActivityComponent	           Activity	                         Activity#onCreate() ~ Activity#OnDestroy()
//         FragmentComponent	           Fragment	                         Fragment#onAttach() ~ Fragment#onDestroy()
//         ViewComponent	               View	                             View#super() ~ 视图销毁
//         ViewWithFragmentComponent	   @WithFragmentBindings注解的View	 View#super() ~ 视图销毁
//         ServiceComponent	               Service	                         Service#onCreate() ~ Service#onDestroy()
//如果想在应用全局中使用NetWorkUtil模块，则将InstallIn注解属性值修改为ApplicationComponent::class即可(好像有问题，懒得看了)
//这里跟上面一样，不是单例
//@Module
//@InstallIn(ActivityComponent::class)
//class NetWorkUtil {
//
//    //方法名getOkHttpClient可以任意取
//    @Provides
//    fun getOkHttpClient(): MyOkHttpClient {
//        return MyOkHttpClient()
//    }
//}

//模拟第三方，不能加注解
class MyOkHttpClient {
    var name: String = "我自己的OkHttpClient"
}

//要单例
class MyOtherHttpClient {
    var name: String = "我的另一个OKHTTPClient"
}

//这样在任意地方调用getOkHttpClient方法都只会创建一个对象
//@Module
//@InstallIn(SingletonComponent::class)
//class OtherNetWorkUtil {
//
//    @Singleton
//    @Provides
//    fun getOkHttpClient(): MyOtherHttpClient {
//        return MyOtherHttpClient()
//    }
//
//}
